function [ output_args ] = tests( input_args )

    vec1 = [1 2 3 4 5 6 7 8 9 10];
    vec2 = [11 12 13 14 15 16 17 18 19 20];
    

    'tests de cruzas'
    testAnular(vec1, vec2);
    testCruceUnPunto(vec1, vec2);
    testCruceDosPuntos(vec1, vec2);
    testCruceUniforme(vec1, vec2);


end


function testAnular(red1, red2)

    ind1Cruz = red1;
    ind2Cruz = red2;

    c = cols(red1);
    
    r=9; %fix((rand(1) * (c-1)) + 1);
    l=5; %round(fix((rand(1) * (c-1)) + 1)/2);
   
    cantCambios=l;
    i=r;
    
    while(cantCambios>0)
        if(i>c) %Si se pasa del ultimo, vuelve a empezar (es circular)
           i=1; 
        end
        aux = ind1Cruz(i);
        ind1Cruz(i) = ind2Cruz(i);
        ind2Cruz(i) = aux;
        i=i+1;
        cantCambios=cantCambios-1;
    end
    'deberia ser [11 12 13 4 5 6 7 8 19 20] y es:'
    ind1Cruz
    'deberia ser [1 2 3 14 15 16 17 18 9 10] y es:'
    ind2Cruz
end

function testCruceUnPunto(red1, red2)
    c = cols(red1);
    locus = 7; %fix((rand(1) * (c-1))+1);
    
    red1Cruce = [red1(1,1:locus) red2(1,locus+1:end)];
    red2Cruce = [red2(1,1:locus) red1(1,locus+1:end)];
    
    'deberia ser [1 2 3 4 5 6 7 18 19 20] y es:'
    red1Cruce
    'deberia ser [11 12 13 14 15 16 17 8 9 10] y es:'
    red2Cruce
end

function testCruceDosPuntos(red1, red2)

    columns = cols(red1);
    
    r1=-1;
    r2=-1;
    
    while(r1==r2)
        r1 = fix((rand(1) * (columns-1)) + 1);
        r2 = fix((rand(1) * (columns-1)) + 1);
    end
    r1
    r2
    r1 = 7
    r2 = 2
    %r1 tiene que ser menor a r2
    if(r1>r2)
        aux = r1;
        r1 = r2;
        r2 = aux;
    end
    
    red1Cruce = [red1(1,1:r1-1) red2(1,r1:r2) red1(1,r2+1:end)];
    red2Cruce = [red2(1,1:r1-1) red1(1,r1:r2) red2(1,r2+1:end)];
        
    'deberia ser [1 12 13 14 15 16 17 8 9 10] y es:'
    red1Cruce
    'deberia ser [11 2 3 4 5 6 7 18 19 20] y es:'
    red2Cruce
end

function testCruceUniforme(red1, red2)
    p = 0.7; %Esta probabilidad es fija (Segun lo que dijeron nacho y daniel)
    
    c = cols(red1);
    
    red1Cruce = zeros(1,c);
    red2Cruce = zeros(1,c);
    
    for i=1:c
        r = rand(1);
        if r<p   %intercambio
            red1Cruce(i) = red2(i);
            red2Cruce(i) = red1(i);
        else     %dejo como esta
            red1Cruce(i) = red1(i);
            red2Cruce(i) = red2(i);
        end
    end
    
    'antes despues'
    red1
    red1Cruce
    red2
    red2Cruce
end


